﻿/*
 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

CKEDITOR.plugins.add('listblock', {requires:['panel'], onLoad:function () {
    CKEDITOR.ui.panel.prototype.addListBlock = function (a, b) {
        return this.addBlock(a, new CKEDITOR.ui.listBlock(this.getHolderElement(), b));
    };
    CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block, $:function (a, b) {
        var d = this;
        d.base(a);
        d.multiSelect = !!b;
        var c = d.keys;
        c[40] = 'next';
        c[9] = 'next';
        c[38] = 'prev';
        c[CKEDITOR.SHIFT + 9] = 'prev';
        c[32] = 'click';
        d._.pendingHtml = [];
        d._.items = {};
        d._.groups = {};
    }, _:{close:function () {
        if (this._.started) {
            this._.pendingHtml.push('</ul>');
            delete this._.started;
        }
    }, getClick:function () {
        if (!this._.click)this._.click = CKEDITOR.tools.addFunction(function (a) {
            var c = this;
            var b = true;
            if (c.multiSelect)b = c.toggle(a); else c.mark(a);
            if (c.onClick)c.onClick(a, b);
        }, this);
        return this._.click;
    }}, proto:{add:function (a, b, c) {
        var f = this;
        var d = f._.pendingHtml, e = 'cke_' + CKEDITOR.tools.getNextNumber();
        if (!f._.started) {
            d.push('<ul class=cke_panel_list>');
            f._.started = 1;
        }
        f._.items[a] = e;
        d.push('<li id=', e, ' class=cke_panel_listItem><a _cke_focus=1 hidefocus=true title="', c || a, '" href="javascript:void(\'', a, '\')" onclick="CKEDITOR.tools.callFunction(', f._.getClick(), ",'", a, "'); return false;\">", b || a, '</a></li>');
    }, startGroup:function (a) {
        this._.close();
        var b = 'cke_' + CKEDITOR.tools.getNextNumber();
        this._.groups[a] = b;
        this._.pendingHtml.push('<h1 id=', b, ' class=cke_panel_grouptitle>', a, '</h1>');
    }, commit:function () {
        var a = this;
        a._.close();
        a.element.appendHtml(a._.pendingHtml.join(''));
        a._.pendingHtml = [];
    }, toggle:function (a) {
        var b = this.isMarked(a);
        if (b)this.unmark(a); else this.mark(a);
        return!b;
    }, hideGroup:function (a) {
        var b = this.element.getDocument().getById(this._.groups[a]), c = b && b.getNext();
        if (b) {
            b.setStyle('display', 'none');
            if (c && c.getName() == 'ul')c.setStyle('display', 'none');
        }
    }, hideItem:function (a) {
        this.element.getDocument().getById(this._.items[a]).setStyle('display', 'none');
    }, showAll:function () {
        var a = this._.items, b = this._.groups, c = this.element.getDocument();
        for (var d in a)c.getById(a[d]).setStyle('display', '');
        for (var e in b) {
            var f = c.getById(b[e]), g = f.getNext();
            f.setStyle('display', '');
            if (g && g.getName() == 'ul')g.setStyle('display', '');
        }
    }, mark:function (a) {
        var b = this;
        if (!b.multiSelect)b.unmarkAll();
        b.element.getDocument().getById(b._.items[a]).addClass('cke_selected');
    }, unmark:function (a) {
        this.element.getDocument().getById(this._.items[a]).removeClass('cke_selected');
    }, unmarkAll:function () {
        var a = this._.items, b = this.element.getDocument();
        for (var c in a)b.getById(a[c]).removeClass('cke_selected');
    }, isMarked:function (a) {
        return this.element.getDocument().getById(this._.items[a]).hasClass('cke_selected');
    }, focus:function (a) {
        this._.focusIndex = -1;
        if (a) {
            var b = this.element.getDocument().getById(this._.items[a]).getFirst(), c = this.element.getElementsByTag('a'), d, e = -1;
            while (d = c.getItem(++e))if (d.equals(b)) {
                this._.focusIndex = e;
                break;
            }
            setTimeout(function () {
                b.focus();
            }, 0);
        }
    }}});
}});
